//
//  main.m
//  03-集合
//
//  Created by 韩旭 on 16/7/6.
//  Copyright © 2016年 基础. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
    //    1.数组
    //    数组：可变数组 NSMutableArray 与 不可变数组NSArray
    //    数组主要有序的存放元素的集合类型.并且可以通过下标取值
    //注意：
    //    数组里面只能存放对象类型
    
    //    不可变数组 只能取值
    //    可变数组  可以增删改的操作
    
    //    2> 初始化数组
    //    <1> initWithObjects 后面填入的参数一定是对象类型可变参数 C语言中的链表（后续讲）
    //    顺序填入你需要的元素
    //  初始化方法
    
    NSArray *array = [[NSArray alloc] initWithObjects:@"12",nil,@"小仓", nil];
    NSLog(@"%@",array);
    
    //  <2> 构造器方法
    NSArray *arr = [NSArray arrayWithObjects:@"123",@"234",@"345",@"456", nil];
    NSLog(@"%@",arr);
    //    <3> 字面量 同 NSString @"" NSNumber @()
    //    NSArray @[]
    //    三种初始化方式, 推荐使用字面量。
    //    如果为空, 字面量会蹦亏 -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]'
    //    但是, 初始化方法会识别nil结束，并不会产生问题
    //    。造成数据丢失
    //   NSObject *object = nil;
    //    NSArray *myArray = @[@"123",object,@"234",@"345",@"456"];
    
    //    3> 取值相关
    //   <1> count 取到数组中元素的个数
    NSLog(@"%ld",arr.count);
    //   <2> count 数组中取值, 通过下标去取值
    [arr objectAtIndex:0];
    NSString *numberString = [arr objectAtIndex:0];
    //   <3> 语法糖 取值方式 快捷取值
    NSString *number = arr[0];
    //   <4> 通过值取下标
    NSUInteger indexObject = [arr indexOfObject:@"123"];
    //   <5> 判断对象是都存于数组中
    BOOL is = [arr containsObject:@"123"];
    NSLog(@"%@",is ? @"YES" : @"NO");
    //   <6> 取数组中第0为的元素 / 取数组中最后一个元素（如果数组为空, 返回的对象为空, 并且不会崩溃）
    [arr firstObject];
    [arr lastObject];
    if (is) {
        NSLog(@"有");
    } else {
        NSLog(@"没有");
    }
    //    4> 不可变数组, 改变元素(会生新的数组, 不会再原数组的基础上进行修改)
    //    1> 数组添加一个新的Object
    arr = [arr arrayByAddingObject:@"1df"];
    NSLog(@"arr = %@",arr);
    //    2> 数组添加另外一个数组中的所有元素
    arr = [arr arrayByAddingObjectsFromArray:arr];
    NSLog(@"%@",arr);
    //    可变数组
    //    NSMutableArray
    //    1> 初始化方法 同 不可变数组
    //    如果遇到可变数组, 只能使用初始化方法或者使用便利构造器
    //    字面量创建方法, 不推荐使用
    NSMutableArray *arrayMutable = [NSMutableArray array];
    //    NSMutableArray *arrayMutable = [@[] mutableCopy];
    //    2> 取值方式 与 不可变数组 一样
    //    3> 可变数组的改变元素
    //    <1> 数组中添加元素 addObject
    [arrayMutable addObject:@"阿龙"];
    //    <2> 数组中插入元素
    [arrayMutable insertObject:@"334" atIndex:0];
    //    <3> 移除 第0个元素
    [arrayMutable removeObjectAtIndex:0];
    ////    移除最后一个元素
    //    [arrayMutable removeLastObject];
    ////    移除全部
    //    [arrayMutable removeAllObjects];
    //    <4> 替换 (使用替换时， 数组对用位置不能为空)
    [arrayMutable replaceObjectAtIndex:0 withObject:@"啊龙"];
    //    NSLog(@"%@",arrayMutable);
    //    - (void)addObject:(ObjectType)anObject;
    //    - (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
    //    - (void)removeLastObject;
    //    - (void)removeObjectAtIndex:(NSUInteger)index;
    //    - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(ObjectType)anObject;
    
    //    可变 与 不可变的区别
    //    1. 可变是可以修改的; 但不可变不可以修改
    //    2. 不可变调用改变的方法时, 会生成对象; 可变调用改变方法时, 在对象本身上进行修改
    //    3. 可变 继承与 不可变
    //   将字符串根据某个子串, 截取成数组
    //     子串消失
    //    根据哪个子串截取, 哪个子串就会消失
    NSString *urlString = @"www.a123cb.com";
    NSArray *arrString = [urlString componentsSeparatedByString:@"."];
    NSLog(@"%@",arrString);
    //  根据某个字符串, 拼接数组成一个字符串
    NSArray *nameArr = @[@"23", @"22", @"sdf"];
    NSString *nameString = [nameArr componentsJoinedByString:@"&"];
    NSLog(@"%@",nameString);
    return 0;
}
